#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<sys/ioctl.h>
#include<sys/select.h>
#include<signal.h>
#include<unistd.h>
#include<fcntl.h>

int fd;
char buf[128];

void sighandler(int signo)
{
    printf("signal %d\n", signo);
    if(read(fd, buf, sizeof(buf)) < 0)
    {
        perror("read");
        exit(1);
    }
    printf("read: %s\n", buf);
}


int main(int argc, char *argv[])
{  
    int ret = 0;
    signal(SIGIO, sighandler);//注册信号处理函数  

    fd =  open("/dev/hello", O_RDWR|O_NONBLOCK);//打开设备文件
    if(fd < 0)
    {
        perror("open");
        exit(1);
    }
    fcntl(fd, F_SETOWN, getpid());
    int flag = fcntl(fd, F_GETFL);
    flag = fcntl(fd, F_SETFL, flag|FASYNC);
    
    printf("fd = %d\n", fd);

    getchar();//阻塞等待用户输入

    close(fd);
    return 0;
}